const { User } = require('../models');
const bcrypt = require('bcryptjs');
const { createToken } = require('../utils/jwt');

exports.register = async (req, res) => {
  try {
    const { username, password, email, phone } = req.body;

    // 检查用户是否已存在
    const existingUser = await User.findOne({
      $or: [
        { username },
        { email },
        { phone }
      ]
    });

    if (existingUser) {
      return res.status(400).json({
        success: false,
        message: '用户名、邮箱或手机号已被注册'
      });
    }

    // 创建新用户
    const user = await User.create({
      username,
      password,
      email,
      phone
    });

    // 返回响应
    res.status(201).json({
      success: true,
      message: '注册成功',
      data: {
        user: {
          id: user._id,
          username: user.username,
          email: user.email,
          phone: user.phone,
          role: user.role
        }
      }
    });

  } catch (error) {
    console.error('注册错误:', error);
    res.status(500).json({
      success: false,
      message: '注册失败',
      error: error.message
    });
  }
};

exports.login = async (req, res) => {
  try {
    const { phone, password } = req.body;

    // 查找用户
    const user = await User.findOne({ phone });
    if (!user) {
      return res.status(400).json({
        success: false,
        message: '手机号或密码错误'
      });
    }

    // 验证密码
    const isMatch = await bcrypt.compare(password, user.password);
    if (!isMatch) {
      return res.status(400).json({
        success: false,
        message: '手机号或密码错误'
      });
    }

    // 生成 JWT token
    const token = await createToken({ id: user._id });

    // 返回响应
    res.status(200).json({
      success: true,
      message: '登录成功',
      data: {
        token,
        user: {
          id: user._id,
          username: user.username,
          email: user.email,
          phone: user.phone,
          role: user.role
        }
      }
    });

  } catch (error) {
    console.error('登录错误:', error);
    res.status(500).json({
      success: false,
      message: '登录失败',
      error: error.message
    });
  }
};

// 管理员注册
exports.adminRegister = async (req, res) => {
  try {
    const { username, password, email, phone, adminCode } = req.body;

    // 验证管理员注册码
    if (adminCode !== process.env.ADMIN_REGISTER_CODE) {
      return res.status(403).json({
        success: false,
        message: '管理员注册码无效'
      });
    }

    // 检查用户是否已存在
    const existingUser = await User.findOne({
      $or: [
        { username },
        { email },
        { phone }
      ]
    });

    if (existingUser) {
      return res.status(400).json({
        success: false,
        message: '用户名、邮箱或手机号已被注册'
      });
    }

    // 创建管理员用户
    const admin = await User.create({
      username,
      password,
      email,
      phone,
      role: 'admin'  // 设置角色为管理员
    });

    // 返回响应
    res.status(201).json({
      success: true,
      message: '管理员注册成功',
      data: {
        user: {
          id: admin._id,
          username: admin.username,
          email: admin.email,
          phone: admin.phone,
          role: admin.role
        }
      }
    });

  } catch (error) {
    console.error('管理员注册错误:', error);
    res.status(500).json({
      success: false,
      message: '管理员注册失败',
      error: error.message
    });
  }
};

// 管理员登录
exports.adminLogin = async (req, res) => {
  try {
    const { username, password } = req.body;

    // 查找管理员用户
    const admin = await User.findOne({
      username,
      role: 'admin'  // 确保只有管理员角色可以登录
    });

    if (!admin) {
      return res.status(401).json({
        success: false,
        message: '智能管理员用户登录'
      });
    }

    // 验证密码
    const isMatch = await bcrypt.compare(password, admin.password);
    if (!isMatch) {
      return res.status(401).json({
        success: false,
        message: '用户名或密码错误'
      });
    }

    // 生成 JWT token
    const token = await createToken({
      id: admin._id,
      role: admin.role  // 在token中包含角色信息
    });

    // 返回响应
    res.status(200).json({
      success: true,
      message: '管理员登录成功',
      data: {
        token,
        user: {
          id: admin._id,
          username: admin.username,
          email: admin.email,
          phone: admin.phone,
          role: admin.role
        }
      }
    });

  } catch (error) {
    console.error('管理员登录错误:', error);
    res.status(500).json({
      success: false,
      message: '管理员登录失败',
      error: error.message
    });
  }
}; 